/**
 *
 */
package com.changwu.cwbase.util;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.text.TextUtils;

import com.blankj.utilcode.util.Utils;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * String 工具类
 */
public class AppStringUtil {
    private static final String TAG = "AppStringUtil";


    /**
     * 删除BOM字符
     *
     * @param data
     * @return
     */
    public static final String removeBOM(String data) {
        if (isNullorEmpty(data)) {
            return data;
        }

        if (data.startsWith("\ufeff")) {
            return data.substring(1);
        } else {
            return data;
        }
    }

    public static boolean isNullorEmpty(String str) {
        if (str == null || "".equals(str)) {
            return true;
        }
        return false;
    }

    /**
     * 验证手机格式
     */
    public static boolean isMobileNO(String mobiles) {

        // 移动：134、135、136、137、138、139、150、151、157(TD)、158、159、187、188
        // 联通：130、131、132、152、155、156、185、186 \n 电信：133、153、180、189、（1349卫通）
        // 总结起来就是第一位必定为1，第二位必定为3或5或8，其他位置的可以为0-9
        String telRegex = "[1][34578]\\d{9}";// "[1]"代表第1位为数字1，"[358]"代表第二位可以为3、5、8中的一个，"\\d{9}"代表后面是可以是0～9的数字，有9位。
        if (TextUtils.isEmpty(mobiles)) {
            return false;
        } else {
            return mobiles.matches(telRegex);
        }
    }

    /**
     * [\u4e00-\u9fa5] //匹配中文字符^[1-9]\d*$ //匹配正整数^[A-Za-z]+$
     * //匹配由26个英文字母组成的字符串^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串^[a-z]+$
     * //匹配由26个英文字母的小写组成的字符串^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
     *
     * @return false 不符合 true 符合
     * @描述 验证输入密码是否符合规范
     */
    public static boolean isPwdlegally(String mPassWord) {
        String pwdRegex = "[A-Za-z0-9]*";
        if (mPassWord.matches(pwdRegex)) {
            return true;
        }
        return false;

    }

    /**
     * 判断目标时间是否大于当前时间
     *
     * @param dateStr 目标时间
     * @return
     */
    public static boolean greaterThanCurDate(String dateStr) {
        long time = System.currentTimeMillis();
        SimpleDateFormat formater = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss");
        try {
            Date date = formater.parse(dateStr);
            if (time < date.getTime()) {
                return true;
            } else {
                return false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断是否为整数
     *
     * @param str 传入的字符串
     * @return 是整数返回true, 否则返回false
     */
    public static boolean isInteger(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
        return pattern.matcher(str).matches();
    }

    /**
     * 判断是否为浮点数，包括double和float
     *
     * @param str 传入的字符串
     * @return 是浮点数返回true, 否则返回false
     */
    public static boolean isDouble(String str) {
        Pattern pattern = Pattern.compile("^[-\\+]?[.\\d]*$");
        return pattern.matcher(str).matches();
    }

    public static boolean isNum(String str) {

        if (str.equals(".")) {
            return false;
        } else {
            if (isDouble(str) || isInteger(str)) {
                return true;
            } else {
                return false;
            }
        }
    }

    /**
     * DecimalFormat转换最简便
     */
    public static String m2(double f) {
        DecimalFormat df = new DecimalFormat("#.00");
        String d = df.format(f);
        if (d.equals(".00")) {
            return "0";
        } else if (d.substring(0, 1).equals(".")) {
            return "0" + d;
        } else {
            return d;
        }
    }

    /**
     * 2  * 获取版本号
     * 3  * @return 当前应用的版本号
     * 4
     */
    public static String getVersion() {
        try {
            PackageManager manager = Utils.getApp().getPackageManager();
            PackageInfo info = manager.getPackageInfo(Utils.getApp().getPackageName(), 0);
            String version = "v" + info.versionName;
            return version;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 2  * 获取版本号
     * 3  * @return 当前应用的版本号
     * 4
     */
    public static String getVersion1() {
        try {
            PackageManager manager = Utils.getApp().getPackageManager();
            PackageInfo info = manager.getPackageInfo(Utils.getApp().getPackageName(), 0);
            String version = info.versionName;
            return version;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 获取img标签中的src值
     * @param content
     * @return
     */
    public static String getImgSrc(String content){
        String str_src = null;
        //目前img标签标示有3种表达式
        //<img alt="" src="1.jpg"/>   <img alt="" src="1.jpg"></img>     <img alt="" src="1.jpg">
        //开始匹配content中的<img />标签
        Pattern p_img = Pattern.compile("<(img|IMG)(.*?)(/>|></img>|>)");
        Matcher m_img = p_img.matcher(content);
        boolean result_img = m_img.find();
        if (result_img) {
            while (result_img) {
                //获取到匹配的<img />标签中的内容
                String str_img = m_img.group(2);

                //开始匹配<img />标签中的src
                Pattern p_src = Pattern.compile("(src|SRC)=(\"|\')(.*?)(\"|\')");
                Matcher m_src = p_src.matcher(str_img);
                if (m_src.find()) {
                    str_src = m_src.group(3);
                }
                //结束匹配<img />标签中的src

                //匹配content中是否存在下一个<img />标签，有则继续以上步骤匹配<img />标签中的src
                result_img = m_img.find();
            }
        }
        return str_src;
    }
}
